home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / nss / nssilock.h < prev    next >
C/C++ Source or Header  |  2006-04-20  |  10KB  |  320 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is the Netscape security libraries.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Netscape Communications Corporation.
  18.  * Portions created by the Initial Developer are Copyright (C) 1994-2000
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *
  23.  * Alternatively, the contents of this file may be used under the terms of
  24.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  25.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  26.  * in which case the provisions of the GPL or the LGPL are applicable instead
  27.  * of those above. If you wish to allow use of your version of this file only
  28.  * under the terms of either the GPL or the LGPL, and not to allow others to
  29.  * use your version of this file under the terms of the MPL, indicate your
  30.  * decision by deleting the provisions above and replace them with the notice
  31.  * and other provisions required by the GPL or the LGPL. If you do not delete
  32.  * the provisions above, a recipient may use your version of this file under
  33.  * the terms of any one of the MPL, the GPL or the LGPL.
  34.  *
  35.  * ***** END LICENSE BLOCK ***** */
  36.  
  37. /*
  38. ** nssilock.h - Instrumented locking functions for NSS
  39. **
  40. ** Description:
  41. **    nssilock provides instrumentation for locks and monitors in
  42. **    the NSS libraries. The instrumentation, when enabled, causes
  43. **    each call to the instrumented function to record data about
  44. **    the call to an external file. The external file
  45. **    subsequently used to extract performance data and other
  46. **    statistical information about the operation of locks used in
  47. **    the nss library.
  48. **     
  49. **    To enable compilation with instrumentation, build NSS with 
  50. **    the compile time switch NEED_NSS_ILOCK defined.
  51. **
  52. **    say:  "gmake OS_CFLAGS+=-DNEED_NSS_ILOCK" at make time.
  53. **
  54. **    At runtime, to enable recording from nssilock, one or more
  55. **    environment variables must be set. For each nssILockType to
  56. **    be recorded, an environment variable of the form NSS_ILOCK_x
  57. **    must be set to 1. For example:
  58. **
  59. **       set NSS_ILOCK_Cert=1
  60. **
  61. **    nssilock uses PRLOG is used to record to trace data. The
  62. **    PRLogModule name associated with nssilock data is: "nssilock".
  63. **    To enable recording of nssilock data you will need to set the
  64. **    environment variable NSPR_LOG_MODULES to enable
  65. **    recording for the nssilock log module. Similarly, you will
  66. **    need to set the environment variable NSPR_LOG_FILE to specify
  67. **    the filename to receive the recorded data. See prlog.h for usage.
  68. **    Example:
  69. **
  70. **        export NSPR_LOG_MODULES=nssilock:6
  71. **        export NSPR_LOG_FILE=xxxLogfile
  72. **
  73. ** Operation:
  74. **    nssilock wraps calls to NSPR's PZLock and PZMonitor functions
  75. **    with similarly named functions: PZ_NewLock(), etc. When NSS is
  76. **    built with lock instrumentation enabled, the PZ* functions are
  77. **    compiled into NSS; when lock instrumentation is disabled,
  78. **    calls to PZ* functions are directly mapped to PR* functions
  79. **    and the instrumentation arguments to the PZ* functions are
  80. **    compiled away.
  81. **
  82. **
  83. ** File Format:
  84. **    The format of the external file is implementation
  85. **    dependent. Where NSPR's PR_LOG() function is used, the file
  86. **    contains data defined for PR_LOG() plus the data written by
  87. **    the wrapped function. On some platforms and under some
  88. **    circumstances, platform dependent logging or
  89. **    instrumentation probes may be used. In any case, the
  90. **    relevant data provided by the lock instrumentation is:
  91. **    
  92. **      lockType, func, address, duration, line, file [heldTime]
  93. ** 
  94. **    where:
  95. **    
  96. **       lockType: a character representation of nssILockType for the
  97. **       call. e.g. ... "cert"
  98. **    
  99. **       func: the function doing the tracing. e.g. "NewLock"
  100. **    
  101. **       address: address of the instrumented lock or monitor
  102. **    
  103. **       duration: is how long was spent in the instrumented function,
  104. **       in PRIntervalTime "ticks".
  105. **    
  106. **       line: the line number within the calling function
  107. **    
  108. **       file: the file from which the call was made
  109. **    
  110. **       heldTime: how long the lock/monitor was held. field
  111. **       present only for PZ_Unlock() and PZ_ExitMonitor().
  112. **    
  113. ** Design Notes:
  114. **    The design for lock instrumentation was influenced by the
  115. **    need to gather performance data on NSS 3.x. It is intended
  116. **    that the effort to modify NSS to use lock instrumentation
  117. **    be minimized. Existing calls to locking functions need only
  118. **    have their names changed to the instrumentation function
  119. **    names.
  120. **    
  121. ** Private NSS Interface:
  122. **    nssilock.h defines a private interface for use by NSS.
  123. **    nssilock.h is experimental in nature and is subject to
  124. **    change or revocation without notice. ... Don't mess with
  125. **    it.
  126. **    
  127. */
  128.  
  129. /*
  130.  * $Id:
  131.  */
  132.  
  133. #ifndef _NSSILOCK_H_
  134. #define _NSSILOCK_H_
  135.  
  136. #include "prtypes.h"
  137. #include "prmon.h"
  138. #include "prlock.h"
  139. #include "prcvar.h"
  140.  
  141. #include "nssilckt.h"
  142.  
  143. PR_BEGIN_EXTERN_C
  144.  
  145. #if defined(NEED_NSS_ILOCK)
  146.  
  147. #define PZ_NewLock(t) pz_NewLock((t),__FILE__,__LINE__)
  148. extern PZLock * 
  149.     pz_NewLock(
  150.         nssILockType ltype,
  151.         char *file,
  152.         PRIntn  line
  153.     );
  154.  
  155. #define PZ_Lock(k)  pz_Lock((k),__FILE__,__LINE__)
  156. extern void
  157.     pz_Lock(
  158.         PZLock *lock,
  159.         char *file,
  160.         PRIntn line
  161.     );
  162.  
  163. #define PZ_Unlock(k) pz_Unlock((k),__FILE__,__LINE__)
  164. extern PRStatus
  165.     pz_Unlock(
  166.         PZLock *lock,
  167.         char *file,
  168.         PRIntn line
  169.     );
  170.  
  171. #define PZ_DestroyLock(k) pz_DestroyLock((k),__FILE__,__LINE__)
  172. extern void
  173.     pz_DestroyLock(
  174.         PZLock *lock,
  175.         char *file,
  176.         PRIntn line
  177.     );
  178.  
  179.  
  180. #define PZ_NewCondVar(l)        pz_NewCondVar((l),__FILE__,__LINE__)
  181. extern PZCondVar *
  182.     pz_NewCondVar(
  183.         PZLock *lock,
  184.         char *file,
  185.         PRIntn line
  186.     );
  187.  
  188. #define PZ_DestroyCondVar(v)    pz_DestroyCondVar((v),__FILE__,__LINE__)
  189. extern void
  190.     pz_DestroyCondVar(
  191.         PZCondVar *cvar,
  192.         char *file,
  193.         PRIntn line
  194.     );
  195.  
  196. #define PZ_WaitCondVar(v,t)       pz_WaitCondVar((v),(t),__FILE__,__LINE__)
  197. extern PRStatus
  198.     pz_WaitCondVar(
  199.         PZCondVar *cvar,
  200.         PRIntervalTime timeout,
  201.         char *file,
  202.         PRIntn line
  203.     );
  204.  
  205. #define PZ_NotifyCondVar(v)     pz_NotifyCondVar((v),__FILE__,__LINE__)
  206. extern PRStatus
  207.     pz_NotifyCondVar(
  208.         PZCondVar *cvar,
  209.         char *file,
  210.         PRIntn line
  211.     );
  212.  
  213. #define PZ_NotifyAllCondVar(v)  pz_NotifyAllCondVar((v),__FILE__,__LINE__)
  214. extern PRStatus
  215.     pz_NotifyAllCondVar(
  216.         PZCondVar *cvar,
  217.         char *file,
  218.         PRIntn line
  219.     );
  220.  
  221.  
  222. #define PZ_NewMonitor(t) pz_NewMonitor((t),__FILE__,__LINE__)
  223. extern PZMonitor *
  224.     pz_NewMonitor( 
  225.         nssILockType ltype,
  226.         char *file,
  227.         PRIntn line
  228.     );
  229.  
  230. #define PZ_DestroyMonitor(m) pz_DestroyMonitor((m),__FILE__,__LINE__)
  231. extern void
  232.     pz_DestroyMonitor(
  233.         PZMonitor *mon,
  234.         char *file,
  235.         PRIntn line
  236.     );
  237.  
  238. #define PZ_EnterMonitor(m) pz_EnterMonitor((m),__FILE__,__LINE__)
  239. extern void
  240.     pz_EnterMonitor(
  241.         PZMonitor *mon,
  242.         char *file,
  243.         PRIntn line
  244.     );
  245.  
  246.  
  247. #define PZ_ExitMonitor(m) pz_ExitMonitor((m),__FILE__,__LINE__)
  248. extern PRStatus
  249.     pz_ExitMonitor(
  250.         PZMonitor *mon,
  251.         char *file,
  252.         PRIntn line
  253.     );
  254.  
  255. #define PZ_InMonitor(m)  (PZ_GetMonitorEntryCount(m) > 0 )
  256. #define PZ_GetMonitorEntryCount(m) pz_GetMonitorEntryCount((m),__FILE__,__LINE__)
  257. extern PRIntn
  258.     pz_GetMonitorEntryCount(
  259.         PZMonitor *mon,
  260.         char *file,
  261.         PRIntn line
  262.     );
  263.  
  264. #define PZ_Wait(m,i) pz_Wait((m),((i)),__FILE__,__LINE__)
  265. extern PRStatus
  266.     pz_Wait(
  267.         PZMonitor *mon,
  268.         PRIntervalTime ticks,
  269.         char *file,
  270.         PRIntn line
  271.     );
  272.  
  273. #define PZ_Notify(m) pz_Notify((m),__FILE__,__LINE__)
  274. extern PRStatus
  275.     pz_Notify(
  276.         PZMonitor *mon,
  277.         char *file,
  278.         PRIntn line
  279.     );
  280.  
  281. #define PZ_NotifyAll(m) pz_NotifyAll((m),__FILE__,__LINE__)
  282. extern PRStatus
  283.     pz_NotifyAll(
  284.         PZMonitor *mon,
  285.         char *file,
  286.         PRIntn line
  287.     );
  288.  
  289. #define PZ_TraceFlush() pz_TraceFlush()
  290. extern void pz_TraceFlush( void );
  291.  
  292. #else /* NEED_NSS_ILOCK */
  293.  
  294. #define PZ_NewLock(t)           PR_NewLock()
  295. #define PZ_DestroyLock(k)       PR_DestroyLock((k))
  296. #define PZ_Lock(k)              PR_Lock((k))
  297. #define PZ_Unlock(k)            PR_Unlock((k))
  298.  
  299. #define PZ_NewCondVar(l)        PR_NewCondVar((l))
  300. #define PZ_DestroyCondVar(v)    PR_DestroyCondVar((v))
  301. #define PZ_WaitCondVar(v,t)     PR_WaitCondVar((v),(t))
  302. #define PZ_NotifyCondVar(v)     PR_NotifyCondVar((v))
  303. #define PZ_NotifyAllCondVar(v)  PR_NotifyAllCondVar((v))
  304.  
  305. #define PZ_NewMonitor(t)        PR_NewMonitor()
  306. #define PZ_DestroyMonitor(m)    PR_DestroyMonitor((m))
  307. #define PZ_EnterMonitor(m)      PR_EnterMonitor((m))
  308. #define PZ_ExitMonitor(m)       PR_ExitMonitor((m))
  309. #define PZ_InMonitor(m)         PR_InMonitor((m))
  310. #define PZ_Wait(m,t)            PR_Wait(((m)),((t)))
  311. #define PZ_Notify(m)            PR_Notify((m))
  312. #define PZ_NotifyAll(m)         PR_Notify((m))
  313. #define PZ_TraceFlush()         /* nothing */
  314.  
  315.     
  316. #endif /* NEED_NSS_ILOCK */
  317.  
  318. PR_END_EXTERN_C
  319. #endif /* _NSSILOCK_H_ */
  320.